package com.blobfish.fiction.book.service;

import com.blobfish.fiction.common.base.model.BaseEntityDto;
import com.blobfish.fiction.common.base.service.IBaseService;
import com.blobfish.fiction.common.model.Book;

import java.util.List;

/**
 * 小说接口
 * @author huangbo
 * @param <DTO>
 */
public interface IBookService<T, DTO extends BaseEntityDto> extends IBaseService<T, DTO> {
    /**
     * 添加小说方法
     * @param book 待添加的数据
     */
    void addBook(Book book);

    /**
     * 判断小说是否存在
     * @param bookNo
     * @return
     */
    Boolean isExists(String bookNo);

    /**
     * 判断对应小说是否已经下载
     * @param bookNo 要检查的bookNo
     * @return 返回结果
     */
    Boolean isDownloaded(String bookNo);

    /**
     * 根据小说编号获取对应小说
     * @param bookNo 要检索的小说编号
     * @return 如果根据小说编号无法找到对应的小说则会返回null
     */
    Book getByBookNo(String bookNo);

    /**
     * 根据状态获取对应的小说列表
     * @param state 小说状态-从枚举获取
     * @return 返回对应的小说列表
     */
    List<Book> listByState(String state);

    /**
     * 根据小说编号删除对应txt
     * @param bookNo 小说编号
     */
    void dropTxtByBookNo(String bookNo);

    /**
     * 根据小说编号获取网上最新章节名
     * @param bookNo 小说编号
     * @return 返回网上最新章节名
     */
    Long getLastestChapterNumOfWebByBookNo(String bookNo);
}